본문으로 건너뛰기

데이터 탐색 - Data Exploration

데이터 탐색은 통계학의 기술 통계(Descriptive Statistics) 분야에 속하며, 일반적으로 EDA(Exploratory Data Analysis)라고 부른다. 기술 통계에서 '기술(Descriptive)'은 테크닉(Technique)이 아닌 '적어서 설명한다'는 의미이며, 데이터를 요약하고 설명하는 것을 목적으로 한다.

이 장에서는 기술통계의 이론적인 설명보다는 실용적인 측면을 중심으로 설명할 것이다. 이론적인 깊이가 필요한 경우 통계학 기반의 다른 책을 참고하기 바란다.

데이터 탐색 개요

데이터 탐색(EDA)은 데이터 분석의 첫 단계로, 데이터의 구조와 특성을 파악하고, 분석 방향을 설정하는 데 매우 중요하다. 데이터의 현황을 파악하지 않고 바로 모델링이나 고급 분석을 시도하면 잘못된 결론에 도달할 수 있다. EDA는 데이터의 문제점(결측치, 이상치 등)을 발견하고, 데이터의 분포와 패턴, 변수 간의 관계를 이해하는 데 중점을 둔다.

데이터 살펴보기

  • 데이터의 크기(행, 열), 변수명, 데이터 타입을 확인한다.
  • 데이터의 샘플(앞부분, 뒷부분)을 직접 출력해본다.
  • 결측치, 이상치, 중복 데이터가 있는지 확인한다.
  • 실무에서는 pandas의 head(), info(), describe(), isnull().sum() 등을 자주 활용한다.

예시:

  • 데이터프레임의 크기: df.shape
  • 변수명과 타입: df.dtypes
  • 결측치 확인: df.isnull().sum()

기초 통계량 확인

  • 평균, 중앙값, 최빈값, 최소/최대값, 분산, 표준편차 등 기본 통계량을 확인한다.
  • 수치형 변수의 분포와 중심 경향, 산포도를 파악한다.
  • 왜도(skewness), 첨도(kurtosis) 등 분포의 특성도 확인한다.
  • 실무에서는 df.describe(), df[컬럼].value_counts(), df[컬럼].unique() 등을 활용한다.

예시:

  • df['age'].mean(), df['age'].median(), df['age'].mode()
  • df['age'].std(), df['age'].min(), df['age'].max()

데이터 시각화

  • 히스토그램, 박스플롯, 산점도, 막대그래프 등 다양한 시각화 기법을 활용한다.
  • 변수의 분포, 이상치, 변수 간 관계를 시각적으로 확인한다.
  • 실무에서는 matplotlib, seaborn, plotly 등 다양한 시각화 라이브러리를 사용한다.

예시:

  • df['age'].hist()
  • sns.boxplot(x='gender', y='age', data=df)
  • sns.scatterplot(x='height', y='weight', data=df)

그룹별 분석

  • 범주형 변수(성별, 지역 등)로 데이터를 그룹화하여 특성을 비교한다.
  • 그룹별 평균, 합계, 비율 등 통계량을 비교한다.
  • 교차분석(교차표, 피벗테이블)로 그룹 간 차이를 분석한다.

예시:

  • df.groupby('gender')['income'].mean()
  • pd.crosstab(df['gender'], df['region'])

상관관계 분석

  • 변수 간 상관계수(피어슨, 스피어만 등)를 계산하여 연관성을 파악한다.
  • 상관행렬을 시각화(heatmap 등)하여 전체적인 관계를 한눈에 본다.
  • 다중공선성(multicollinearity) 여부도 확인한다.

예시:

  • df.corr()
  • sns.heatmap(df.corr(), annot=True)

패턴과 추세 분석

  • 시간에 따른 변화(시계열), 계절성, 주기성, 이상점 등을 확인한다.
  • 시계열 데이터는 라인플롯, 이동평균선 등으로 추세를 시각화한다.

예시:

  • df['date'] = pd.to_datetime(df['date'])
  • df.set_index('date')['sales'].plot()

세부 분석

  • 특정 구간, 조건, 세그먼트별로 데이터를 심층 분석한다.
  • 이상치의 원인, 특이 패턴의 배경 등을 추가로 탐색한다.
  • 실무에서는 조건 필터링, 쿼리, 서브셋 추출 등을 자주 활용한다.

예시:

  • df[df['age'] > 60]
  • df[(df['income'] > 5000) & (df['region'] == '서울')]

가설 생성과 검증

  • 데이터 탐색 과정에서 발견한 특징을 바탕으로 가설을 세운다.
  • 통계적 검정(예: t-test, 카이제곱 검정 등)으로 가설을 검증한다.
  • 가설이 수용/기각되는지 판단하고, 추가 분석 방향을 설정한다.

예시:

  • "남성과 여성의 평균 소득에 차이가 있을까?"
  • scipy.stats.ttest_ind(df[df['gender']=='M']['income'], df[df['gender']=='F']['income'])

문서화와 보고

  • 데이터 탐색 과정에서 발견한 주요 인사이트, 시각화 자료, 통계 결과를 정리한다.
  • 분석 결과는 보고서, 프레젠테이션, 대시보드 등 다양한 형태로 공유한다.
  • 실무에서는 시각화 자료와 함께, 데이터의 한계점, 추가 분석 필요성, 실질적 시사점을 명확히 기술하는 것이 중요하다.
  • 반복적이고 순환적인 탐색 과정을 명확히 기록해두면, 향후 분석 재현성과 협업에 큰 도움이 된다.

추가 분석 계획

  • 데이터 탐색 결과, 추가로 심층 분석이 필요한 영역을 파악한다.
  • 추가 데이터 수집, 고급 분석 기법(머신러닝 등) 적용 여부를 결정한다.
  • 분석 목적에 따라 다음 단계(모델링, 인과분석 등)로 자연스럽게 연결한다.

데이터 탐색(EDA)은 단순히 한 번에 끝나는 작업이 아니라, 분석 목적과 데이터 특성에 따라 반복적이고 순환적으로 이루어진다. 탐색 과정에서 발견한 인사이트는 이후의 데이터 전처리, 모델링, 결과 해석 등 모든 분석 단계에 큰 영향을 미친다. 실무에서는 데이터 탐색에 충분한 시간을 투자하는 것이 성공적인 데이터 분석의 핵심이다.